use minigrep::*;
use std::env;

#[test]
fn case_insensitive_no_env_var() {
    let empty = "".to_string();
    let mut config = Config {
        query: empty.clone(),
        filename: empty.clone(),
        case_sensitive: false,
    };

    // query and filename without en env variable
    let config_input = Config::new(&[empty.clone(), empty.clone(), empty.clone()]);
    assert_eq!(config, config_input.unwrap());

    // case-insensitive control argument, query and filename without en env variable
    let config_input = Config::new(&[
        empty.clone(),
        "-i".to_string(),
        empty.clone(),
        empty.clone(),
    ]);
    assert_eq!(config, config_input.unwrap());

    // case-sensitive control argument, query and filename without en env variable
    let config_input = Config::new(&[
        empty.clone(),
        "-I".to_string(),
        empty.clone(),
        empty.clone(),
    ]);
    config.case_sensitive = true;
    assert_eq!(config, config_input.unwrap());
}

#[test]
fn case_insensitive_env_var() {
    let empty = "".to_string();
    let config = Config {
        query: empty.clone(),
        filename: empty.clone(),
        case_sensitive: false,
    };

    env::set_var("CASE_INSENSITIVE", "1"); // insensitive
                                           // query and filename with en env variable
    let config_input = Config::new(&[empty.clone(), empty.clone(), empty.clone()]);
    assert_eq!(config, config_input.unwrap());
}

#[test]
fn case_insensitive_conflict() {
    let empty = "".to_string();
    let config = Config {
        query: empty.clone(),
        filename: empty.clone(),
        case_sensitive: false,
    };

    env::set_var("CASE_INSENSITIVE", "0"); // sensitive
    let config_conflict = Config::new(&[
        empty.clone(),
        "-i".to_string(), // insensitive
        empty.clone(),
        empty.clone(),
    ]);
    assert_eq!(config, config_conflict.unwrap());
}

#[test]
fn case_sensitive_conflict() {
    let empty = "".to_string();
    let config = Config {
        query: empty.clone(),
        filename: empty.clone(),
        case_sensitive: true,
    };

    env::set_var("CASE_INSENSITIVE", "1"); //insensitive
    let config_conflict = Config::new(&[
        empty.clone(),
        "-I".to_string(), // sensitive
        empty.clone(),
        empty.clone(),
    ]);
    assert_eq!(config, config_conflict.unwrap());
}
